package com.leetcode.根据数据结构分类.链表;

import com.leetcode.datastructure.ListNode;

/**
 * @author: ZhouBert
 * @date: 2020/11/19
 * @description: https://leetcode-cn.com/problems/remove-linked-list-elements/
 * 删除链表中等于给定值 val 的所有节点。
 * <p>
 * 示例:
 * <p>
 * 输入: 1->2->6->3->4->5->6, val = 6
 * 输出: 1->2->3->4->5
 */
public class A_203_移除链表元素 {

	/**
	 * CASE:
	 * 1
	 * @param head
	 * @param val
	 * @return
	 */
	public ListNode removeElements(ListNode head, int val) {
		if (head == null) {
			return head;
		}
		//1.增加哨兵节点
		ListNode guard = new ListNode(0);
		guard.next = head;
		//2.增加一个指针指向当前节点（此时cur !=null）
		ListNode cur = head;
		//3.再增加一个 前指针
		ListNode pre = guard;
		while (cur != null) {
			//如果当前指针匹配了
			if (cur.val == val) {
				pre.next = cur.next;
			}else{
				pre = pre.next;
			}
			cur = cur.next;

		}
		//最终是要返回哨兵的后一个节点！
		return guard.next;
	}
}
